<!DOCTYPE html>
<!-- 引入thymeleaf命名空间
xmlns:th="http;//www.thymeleaf.org"
可以使用thymeleaf属性  ，属性是放在html中
-->
<html lang="en" xmlns:th="http;//www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Thymeleaf入门</title>
</head>
<body>
<!--静态页面显示百战程序员，动态页面使用后传来的数据-->
<!--thymeleaf是支持el表达式-->
<h2 th:text="${msg}">百战程序员</h2>
<input th:value="${msg}"><br>
<span th:text="${#strings.isEmpty(msg)}"></span><br>
<span th:text="${#strings.contains(msg,'s')}"></span><br>
<span th:text="${#strings.length(msg)}"></span><br>
<span th:text="${#strings.toUpperCase(msg)}"></span><br>
<span th:text="${#strings.substring(msg,2,5)}"></span><br>
<span th:text="${#strings.startsWith(msg,'e')}"></span><br>
<span th:text="${#strings.endsWith(msg,'f')}"></span><br>
<span th:text="${#strings.indexOf(msg,'l')}"></span><br>
<span th:text="${#strings.toLowerCase(msg)}"></span><br>
<hr>
<span th:text="${#dates.format(date)}"></span><br>
<span th:text="${#dates.format(date,'yyyy/MM/dd')}"></span><br>
<span th:text="${#dates.year(date)}"></span><br>
<span th:text="${#dates.month(date)}"></span><br>
<span th:text="${#dates.day(date)}"></span><br>
<hr>
<div>
    <span th:if="${sex}=='男'">性别：男</span>
    <span th:if="${sex}=='女'">性别：女</span>
</div>
<div th:switch="${id}">
    <span th:case="1">ID为1</span>
    <span th:case="2">Id为2</span>
    <span th:case="3">Id为3</span>
    <span th:case="4">Id为4</span>
    <span th:case="*">Id为*</span>
</div>

<!--遍历集合-->
<table border="1" width="100" align="center" cellspacing="0" cellpadding="0">
    <tr>
        <th>id</th>
        <th>name</th>
        <th>age</th>
    </tr>
    <!--遍历集合每一个名为user，{users}是从model中拿到的集合-->
    <tr th:each="user:${users}">
        <td th:text="${user.id}"></td>
        <td th:text="${user.name}"></td>
        <td th:text="${user.age}"></td>
    </tr>
</table>
<table border="1" cellpadding="0" cellspacing="0" width="50%">
    <!--冒号前的第一个对象是遍历出的对象，第二个对象是封装状态变量的对象-->
    <tr th:each="user,status:${users}">
        <td th:text="${user.id}"></td>
        <td th:text="${user.name}"></td>
        <td th:text="${user.age}"></td>
        <td th:text="${status.index}"></td>
        <td th:text="${status.count}"></td>
        <td th:text="${status.size}"></td>
        <td th:text="${status.odd}"></td>
        <td th:text="${status.even}"></td>
        <td th:text="${status.first}"></td>
        <td th:text="${status.last}"></td>
    </tr>
</table>
<hr>
<table border="1" width="50%">
    <tr>
        <th>id</th>
        <th>name</th>
        <th>age</th>
        <th>key</th>
    </tr>
    <!--m是键值对，遍历出的是一个键值对对象，key获取键， value获取值-->
    <tr th:each="m:${map}">
        <td th:text="${m.value.id}"></td>
        <td th:text="${m.value.name}"></td>
        <td th:text="${m.value.age}"></td>
        <td th:text="${m.key}"></td>
    </tr>
</table>
<hr>
<!--request 获取数据的方法 从内置对象中获取-->
request1:<span th:text="${#request.getAttribute('req')}"></span>
request2:<span th:text="${#httpServletRequest.getAttribute('req')}"></span>
<hr>
<!--httpSession-->
<!--直接获取-->
session1:<span th:text="${session.ses}"></span>
<!--内置对象中获取-->
session2:<span th:text="${#httpSession.getAttribute('ses')}"></span>
<!--application(context)-->
<hr>
application1:<span th:text="${application.app}"></span>
application2:<span th:text="${#servletContext.getAttribute('app')}"></span>
<hr>
<a th:href="@{http://www.baidu.com}">百度</a>
<hr>
<!--自己定义参数，从前端传进来-->
<a th:href="@{show2?id=1&name=sxt}">静态参数1</a>
<a th:href="@{show2(id=2,name=bz)}">静态参数2</a>
<!--动态参数，从后端model传进来-->
<a th:href="@{'show2?id='+${id}+'&name='+${name}}">动态参数1</a>
<a th:href="@{show2(id=${id},name=${name})}">动态参数2</a>
<a th:href="@{/show3/{id}/{name}(id=${id},name=${name})}">Restful风格传参</a>
<p>热部署，就是在应用正在运行的时候升级软件，却不需要重新启动应用。即修改完代码后不需要重启项目即可生效</p>
</body>
</html>
<!--Thymeleaf提供了一些内置对象可以操作数据，
内置对象可直接在模板中使用，
这些对象是以#引用的，操作字符串的内置对象为strings。-->

<!--
方法	                                说明
${#strings.isEmpty(key)}	判断字符串是否为空，如果为空返回true，否则返回false
${#strings.contains(msg,'T')}	判断字符串是否包含指定的子串，如果包含返回true，否则返回false
${#strings.startsWith(msg,'a')}	判断当前字符串是否以子串开头，如果是返回true，否则返回false
${#strings.endsWith(msg,'a')}	判断当前字符串是否以子串结尾，如果是返回true，否则返回false
${#strings.length(msg)}	        返回字符串的长度
${#strings.indexOf(msg,'h')}	查找子串的位置，并返回该子串的下标，如果没找到则返回-1
${#strings.substring(msg,2,5)}	截取子串，用法与JDK的subString方法相同
${#strings.toUpperCase(msg)}	字符串转大写
${#strings.toLowerCase(msg)}	字符串转小写
-->

<!--
thymeleaf将遍历的状态变量封装到一个对象中，通过该对象的属性可以获取状态变量：

状态变量	含义
index	当前迭代器的索引，从0开始
count	当前迭代对象的计数，从1开始
size	被迭代对象的长度
odd/even	布尔值，当前循环是否是偶数/奇数，从0开始
first	布尔值，当前循环的是否是第一条，如果是返回true，否则返回false
last	布尔值，当前循环的是否是最后一条，如果是则返回true，否则返回false
-->